package com.gitee.magic.jdbc.persistence.source.jdbc.mapper;

import java.lang.reflect.Method;

import com.gitee.magic.core.exception.ApplicationException;
 

/**
 * @author start
 */
public class ParseBean {
	
	/**
	 * 拼接出方法名
	 * @param pre  方法的前缀 一般取属性的值为“get”
	 * @param field  bean中的属性字段名
	 * @return
	 */
	public static String generateMethodName(String pre,String field){
		String prop = Character.toUpperCase(field.charAt(0))+field.substring(1);
		String methodName = pre+prop;
		return methodName;
	}
	
	
	/**
	 * 解析请求信息 获取属性字段的值
	 * @param bean  传入的要解析的bean对象
	 * @param expr  要解析的请求信息
	 * @return  返回取到对应字段的值
	 */
	public static Object parse(Object bean,String expr){
		Class<?> beanClass = bean.getClass();
		Method method = null;
		Object value = null;
		try {
			method = beanClass.getMethod(generateMethodName("get",expr));
			value = method.invoke(bean);
		} catch (Exception e) {
			throw new ApplicationException(e);
		}
		return value;
	}
	
	/**
	 * @param bean  传入的要解析的bean对象
	 * @param expr	要解析的请求信息
	 * @return 属性字段的名称
	 */
	public static Object parseRequestString(Object bean,String expr){
		String[] keys = expr.split("\\.");
		Object value = null;
		value = parse(bean, keys[1]);
		return value;
	}
	
}